Concurrency এবং Lock Management

Database Tutorials - এইচ২ ডাটাবেস (H2 Database) H2 Database এর Multi-Version Concurrency Control (MVCC) |
253
253

H2 Database এর Concurrency এবং Lock Management অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন একাধিক ট্রানজাকশন একই সময়ে ডেটাবেজে কাজ করে। Concurrency management নিশ্চিত করে যে একাধিক ট্রানজাকশন সমান্তরালভাবে কার্যকরীভাবে চলতে পারে, এবং Lock management এটি নিশ্চিত করে যে একাধিক ট্রানজাকশন একই ডেটা পরিবর্তন না করে।

H2 ডেটাবেজে Concurrency এবং Locking এর মাধ্যমে ডেটাবেজের বিভিন্ন রেকর্ডের ওপর একাধিক ট্রানজাকশন নিরাপদভাবে কাজ করতে পারে। এই পদ্ধতিটি ACID (Atomicity, Consistency, Isolation, Durability) প্রপার্টিজ নিশ্চিত করতে সাহায্য করে।


Concurrency Management

Concurrency হল একাধিক ট্রানজাকশন একে অপরের সাথে সমান্তরালভাবে কাজ করা, যখন ডেটাবেজে বিভিন্ন রেকর্ড একাধিক ট্রানজাকশন দ্বারা অ্যাক্সেস করা হয়। H2 ডেটাবেজে concurrency management নিশ্চিত করতে Isolation Levels এবং Locking Mechanisms ব্যবহার করা হয়।

Concurrency এর মূল উদ্দেশ্য:

  • Performance: একাধিক ট্রানজাকশন একযোগে কার্যকরীভাবে চলতে পারে, যাতে ডেটাবেজের কার্যক্ষমতা বৃদ্ধি পায়।
  • Data Integrity: একই রেকর্ডে একাধিক ট্রানজাকশন কাজ করার ফলে ডেটার সঠিকতা বজায় রাখা।
  • Avoid Deadlock: Deadlock (যখন দুটি বা তার বেশি ট্রানজাকশন একে অপরকে ব্লক করে) এড়ানোর জন্য lock management ব্যবহার করা হয়।

Lock Management

Locking হল একটি প্রক্রিয়া যা একাধিক ট্রানজাকশন একসাথে একই ডেটা অ্যাক্সেস করতে বাধা দেয়। H2 ডেটাবেজে Row-level Locking এবং Table-level Locking দুই ধরনের lock management ব্যবহৃত হয়।

Locking এর উদ্দেশ্য:

  • একাধিক ট্রানজাকশন যাতে একই ডেটাকে পরিবর্তন বা পড়ে না ফেলে তার জন্য লক করা।
  • ট্রানজাকশনগুলোকে একটি নির্দিষ্ট পরিসরে পৃথকভাবে পরিচালনা করা।
  • Isolation নিশ্চিত করতে যাতে একাধিক ট্রানজাকশন একে অপরের কার্যক্রমের ওপর প্রভাব না ফেলতে পারে।

Lock Types:

  • Shared Lock: যখন একাধিক ট্রানজাকশন একই ডেটার উপর পড়ার (read) কাজ করছে, তখন এই লক ব্যবহৃত হয়। একাধিক ট্রানজাকশন একই সময়ে ডেটা পড়তে পারে, কিন্তু কেউ সেটি আপডেট বা মুছে ফেলতে পারে না।
  • Exclusive Lock: যখন কোনো ট্রানজাকশন ডেটার ওপর পরিবর্তন (write) করতে চায়, তখন এক্সক্লুসিভ লক ব্যবহার করা হয়। এতে অন্য কোনো ট্রানজাকশন সেই ডেটাতে পরিবর্তন করতে পারে না যতক্ষণ না লক মুক্ত হয়।
  • Optimistic Locking: Optimistic Locking তখন ব্যবহৃত হয় যখন ডেটার উপর পরিবর্তন করার আগে কোন lock নিতে হয় না, তবে ডেটা আপডেট করার সময় সেটা আবার চেক করা হয় যদি অন্য ট্রানজাকশন সেই ডেটা পরিবর্তন না করে থাকে।

H2 ডেটাবেজে Concurrency এবং Locking এর Implementation

1. Isolation Levels (পৃথকীকরণ স্তর)

H2 ডেটাবেজে বিভিন্ন Isolation Levels রয়েছে, যা ডেটার অ্যাক্সেসের পৃথকীকরণকে নিয়ন্ত্রণ করে। Isolation Levels নির্ধারণ করে ট্রানজাকশনগুলো একে অপরের কার্যক্রমের উপর কতটা প্রভাব ফেলতে পারে।

Isolation Levels:
  1. READ UNCOMMITTED: এই স্তরে ডেটা পঠনযোগ্য থাকে, তবে এমনকি অপরিপূর্ণ বা অস্বীকৃত ট্রানজাকশনের ডেটাও পড়তে পারে।
  2. READ COMMITTED: ডেটা শুধুমাত্র সেই ট্রানজাকশনের জন্য অ্যাক্সেসযোগ্য যেটি সফলভাবে কমিট করা হয়েছে। এই স্তরে, আপনি "dirty reads" বা অপরিপূর্ণ ডেটা দেখতে পাবেন না।
  3. REPEATABLE READ: একে "ফিক্সড পঠন" বলা হয়, যেখানে একটি ট্রানজাকশন একবার ডেটা পড়লে, পরবর্তী সময়ে সেই ডেটা অপরিবর্তিত থাকবে, তবে অন্য কোনো ট্রানজাকশন দ্বারা লক নেওয়া যাবে না।
  4. SERIALIZABLE: এই স্তর হল সর্বোচ্চ নিরাপত্তার স্তর, যেখানে একে অপরের সাথে সমান্তরাল ট্রানজাকশনগুলি একে অপরকে ব্লক করবে এবং কার্যকরীভাবে একে অপরের সাথে স্থানীয়ভাবে যোগাযোগ করবে।

H2 এ Isolation Level পরিবর্তন করা:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

এটি ট্রানজাকশন চলাকালীন Serializable Isolation Level নির্ধারণ করবে, যাতে সমস্ত ট্রানজাকশন একে অপরের থেকে পৃথক থাকবে।

2. Locking Mechanisms

H2 ডেটাবেজে লক ব্যবস্থাপনা করতে দুই ধরনের লকিং ব্যবহার করা হয়:

Row-level Locking (পঙক্তি-স্তরের লকিং)

এই পদ্ধতিতে, H2 ডেটাবেজ শুধুমাত্র সংশ্লিষ্ট রেকর্ডকে লক করে, যা কার্যকরীভাবে একাধিক ট্রানজাকশনকে একই সময়ে ভিন্ন ভিন্ন রেকর্ডে কাজ করার অনুমতি দেয়।

উদাহরণ:
যদি দুটি ট্রানজাকশন একে অপরের সাথে বিভিন্ন রেকর্ড আপডেট করার চেষ্টা করে, তবে Row-level Locking নিশ্চিত করবে যে তারা একে অপরকে বাধা না দেয়।

Table-level Locking (টেবিল-স্তরের লকিং)

এই পদ্ধতিতে, যখন একটি ট্রানজাকশন একটি টেবিলের ওপর কাজ করে, তখন টেবিলটির সমস্ত রেকর্ডই লক হয়ে যায়। অন্য ট্রানজাকশন একই টেবিলের সাথে কাজ করতে পারবে না যতক্ষণ না প্রথম ট্রানজাকশন সম্পন্ন হয়।


Concurrency এবং Locking Example in H2

Scenario: Bank Transfer Example

ধরা যাক, একটি ট্রানজাকশন "User A" এর অ্যাকাউন্ট থেকে টাকা কেটে "User B" এর অ্যাকাউন্টে ট্রান্সফার করার চেষ্টা করছে। যদি একই সময়ে দুটি ট্রানজাকশন ঘটে, তবে H2-র Row-level Locking নিশ্চিত করবে যে এক ট্রানজাকশন অন্যটিকে ব্লক করবে না, এবং একই ডেটা পরিবর্তন করতে বাধা দেওয়া হবে।

BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;

COMMIT;

এই কোডের মাধ্যমে, একক ট্রানজাকশন চালানো হচ্ছে, যেখানে Row-level Locking এই ডেটা পরিবর্তনের সময় নিশ্চিত করবে যে অন্য কোনো ট্রানজাকশন একই রেকর্ড পরিবর্তন করার চেষ্টা করছে না।


Deadlock এবং Concurrency Issues

Deadlock তখন ঘটে যখন দুটি বা তার বেশি ট্রানজাকশন একে অপরকে ব্লক করে রাখে, এবং একটি ট্রানজাকশন কখনও শেষ হতে পারে না। H2 ডেটাবেজ deadlock detection এর মাধ্যমে এ ধরনের সমস্যার সমাধান করতে সক্ষম, এবং এতে rollback করে deadlock নিরসন করা হয়।


উপসংহার

H2 ডেটাবেজে Concurrency এবং Lock Management কার্যকরীভাবে পরিচালনা করার জন্য Isolation Levels, Row-level Locking, এবং Table-level Locking ব্যবহৃত হয়। এই পদ্ধতিগুলি নিশ্চিত করে যে একাধিক ট্রানজাকশন নিরাপদ এবং স্বতন্ত্রভাবে কাজ করতে পারে, এবং ডেটাবেজে কোনো অসঙ্গতি বা দ্বন্দ্ব না ঘটে। H2 এর Locking ও Concurrency management-এর মাধ্যমে, ডেটাবেজের কার্যক্ষমতা এবং নিরাপত্তা একসাথে বজায় থাকে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion